package  main.java.leetcode.editor.cn;
//2022-03-31 22:07:18
//自除数 是指可以被它包含的每一位数整除的数。 
//
// 
// 例如，128 是一个 自除数 ，因为 128 % 1 == 0，128 % 2 == 0，128 % 8 == 0。 
// 
//
// 自除数 不允许包含 0 。 
//
// 给定两个整数 left 和 right ，返回一个列表，列表的元素是范围 [left, right] 内所有的 自除数 。 
//
// 
//
// 示例 1： 
//
// 
//输入：left = 1, right = 22
//输出：[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]
// 
//
// 示例 2: 
//
// 
//输入：left = 47, right = 85
//输出：[48,55,66,77]
// 
//
// 
//
// 提示： 
//
// 
// 1 <= left <= right <= 104 
// 
// Related Topics 数学 
// 👍 220 👎 0

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

class SelfDividingNumbers {
    public static void main(String[] args) {
        //创建该题目的对象方便调用
        Solution solution = new SelfDividingNumbers().new Solution();
        List<Integer> res = solution.selfDividingNumbers(1,22);
        Iterator<Integer> it = res.iterator();
        while (it.hasNext()){
            System.out.print(it.next()+" ");
        }

    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public List<Integer> selfDividingNumbers(int left, int right) {

        List<Integer> result = new LinkedList<>();
        while (left<=right){
            int key = left;

            while (true){
                int num = key%10;
                if(num == 0){
                    break;
                }
                int i = left%num;
                if(i == 0){
                    key = key/10;
                }
                if(i != 0){
                    break;
                }
                if(key==0){
                    result.add(left);
                    break;
                }
            }
            left++;
        }
        return result;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
